from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator

class ExampleModel(models.Model):
    # 字符字段
    char_field = models.CharField(max_length=100, help_text="这是一个 CharField，用于存储短文本。")

    # 文本字段
    text_field = models.TextField(help_text="这是一个 TextField，用于存储长文本。")

    # 整数字段
    integer_field = models.IntegerField(help_text="这是一个 IntegerField，用于存储整数。")

    # 正整数字段
    positive_integer_field = models.PositiveIntegerField(help_text="这是一个 PositiveIntegerField，用于存储正整数。")

    # 小整数字段
    small_integer_field = models.SmallIntegerField(help_text="这是一个 SmallIntegerField，用于存储小整数。")

    # 正小整数字段
    positive_small_integer_field = models.PositiveSmallIntegerField(help_text="这是一个 PositiveSmallIntegerField，用于存储正小整数。")

    # 大整数字段
    big_integer_field = models.BigIntegerField(help_text="这是一个 BigIntegerField，用于存储大整数。")

    # 布尔字段
    boolean_field = models.BooleanField(default=False, help_text="这是一个 BooleanField，用于存储布尔值。")

    # 空布尔字段
    null_boolean_field = models.BooleanField(null=True, help_text="这是一个 NullBooleanField，用于存储可为空的布尔值。")

    # 日期字段
    date_field = models.DateField(auto_now_add=True, help_text="这是一个 DateField，用于存储日期。")

    # 时间字段
    time_field = models.TimeField(auto_now_add=True, help_text="这是一个 TimeField，用于存储时间。")

    # 日期时间字段
    datetime_field = models.DateTimeField(auto_now_add=True, help_text="这是一个 DateTimeField，用于存储日期和时间。")

    # 持续时间字段
    duration_field = models.DurationField(help_text="这是一个 DurationField，用于存储时间间隔。")

    # 浮点数字段
    float_field = models.FloatField(help_text="这是一个 FloatField，用于存储浮点数。")

    # 十进制字段
    decimal_field = models.DecimalField(
        max_digits=5,
        decimal_places=2,
        help_text="这是一个 DecimalField，用于存储固定精度的十进制数。"
    )

    # 文件字段
    file_field = models.FileField(upload_to='files/', help_text="这是一个 FileField，用于上传文件。")

    # 图片字段
    image_field = models.ImageField(upload_to='images/', help_text="这是一个 ImageField，用于上传图片。")

    # URL 字段
    url_field = models.URLField(help_text="这是一个 URLField，用于存储 URL。")

    # 邮箱字段
    email_field = models.EmailField(help_text="这是一个 EmailField，用于存储电子邮件地址。")

    # UUID 字段
    uuid_field = models.UUIDField(help_text="这是一个 UUIDField，用于存储 UUID。")

    # JSON 字段
    json_field = models.JSONField(default=dict, help_text="这是一个 JSONField，用于存储 JSON 数据。")

    # 外键字段
    foreign_key_field = models.ForeignKey(
        'self',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        help_text="这是一个 ForeignKey，用于建立一对多关系。"
    )

    # 多对多字段
    many_to_many_field = models.ManyToManyField(
        'self',
        blank=True,
        help_text="这是一个 ManyToManyField，用于建立多对多关系。"
    )

    # 一对一字段
    one_to_one_field = models.OneToOneField(
        'self',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        help_text="这是一个 OneToOneField，用于建立一对一关系。"
    )

    # IP 地址字段
    ip_address_field = models.GenericIPAddressField(help_text="这是一个 GenericIPAddressField，用于存储 IP 地址。")

    # 文件路径字段
    file_path_field = models.FilePathField(path='/path/to/files/', help_text="这是一个 FilePathField，用于选择文件路径。")

    # Slug 字段
    slug_field = models.SlugField(help_text="这是一个 SlugField，用于存储短标签。")

    # 自定义验证字段
    validated_field = models.IntegerField(
        validators=[MinValueValidator(0), MaxValueValidator(100)],
        help_text="这是一个带有验证器的字段，值必须在 0 到 100 之间。"
    )

    # 自定义选择字段
    CHOICES = [
        ('A', '选项 A'),
        ('B', '选项 B'),
        ('C', '选项 C'),
    ]
    choice_field = models.CharField(
        max_length=1,
        choices=CHOICES,
        help_text="这是一个带有选项的 CharField。"
    )

    def __str__(self):
        return self.char_field

    class Meta:
        verbose_name = "示例模型"
        verbose_name_plural = "示例模型"